package edu.uoc.tds.pac4.beansGestors;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import edu.uoc.tds.pac4.DAO.GestorDisc;
import edu.uoc.tds.pac4.DAO.Select;
import edu.uoc.tds.pac4.beans.Universitat;
import edu.uoc.tds.pac4.common.GestioEventsException;

public class GestorUniversitats extends GestorDisc{

	private static final long serialVersionUID = 1L;
	
	protected static final String getColumnes = "u.codi_universitat AS u_codi, u.nom AS u_nom, " +
		"u.pais AS u_pais, u.localitat AS u_localitat, u.cp AS u_cp, u.adreca AS u_adreca, u.telefon1 AS u_telefon1, " +
		"u.telefon2 AS u_telefon2, u.fax AS u_fax, u.email AS u_email, u.web AS u_web, u.actiu AS u_actiu, " + 
		"u.data_alta AS u_data_alta, u.data_baixa AS u_data_baixa, u.motiu_baixa AS u_motiu_baixa, " + 
		"l.codi_localitat AS l_codi_localitat, l.nom AS l_nom, l.codi_pais AS l_codi_pais, " +
		"p.codi_pais AS p_codi_pais, p.nom AS p_nom ";
	
	/**
	 * Constructor
	 */
	public GestorUniversitats ()
	{
		super();
	}
	
	/**
	 * Retorna les universitats
	 * @return Vector Universitats
	 * @throws GestioEventsException
	 */
	public Vector<Universitat> getUniversitats(boolean actiu)throws GestioEventsException
	{
		Vector<Universitat> universitats = new Vector<Universitat>();
		String sql = "universitats u JOIN mestrelocalitats l ON u.localitat = l.codi_localitat " +
			"JOIN mestrepaissos p ON u.pais = p.codi_pais";
		
		String sqlWhere = "";
		boolean isFirstWhere = true;
		
		if(actiu) {
			if(isFirstWhere) isFirstWhere = false;
			else sqlWhere += " AND";
			sqlWhere += " u.actiu = 'S' ";
		}
		
		Select sel = new Select(sql, sqlWhere);
		sel.addCamp(getColumnes);
		ResultSet rs = this.llegir(sel);
		if(rs != null){
			try {
				do{
					Universitat universitat = new Universitat();
					universitat.buildFromRS(rs);
					universitats.add(universitat);
				} while(rs.next());
				rs.close();
			} 
			catch (SQLException e) 
			{
				throw new GestioEventsException(GestioEventsException.Error_BD);
			}
		}
		return universitats;
	}
	/***
	 * Retorna la univesitat identificada pel codi
	 * @param codiUniversitat
	 * @return
	 * @throws GestioEventsException
	 */
	public Universitat getUniversitat(String codiUniversitat) throws GestioEventsException
	{
		Universitat u = new Universitat();
		
		String sql = "universitats u JOIN mestrelocalitats l ON u.localitat = l.codi_localitat " +
					"JOIN mestrepaissos p ON u.pais = p.codi_pais";
	
		Select sel = new Select(sql, "u.codi_universitat = " + this.putString(codiUniversitat));
		sel.addCamp(getColumnes);
		ResultSet rs = this.llegir(sel);
		try { 
			if(rs != null) {
				u.buildFromRS(rs);
				rs.close();
			} else
				throw new GestioEventsException(GestioEventsException.Error_BD_inexistent);
		} 
		catch (SQLException e) {
			throw new GestioEventsException(GestioEventsException.Error_BD);
		}
		
		return u;
	}
}
